/***********************************************************************************
 * 文件名： polsys_config.h
 * 版本： 5
 * 说明：
 * 		polsys 的配置文件。此文件可以当作通用头文件，可以在这里添加一些顶级宏定义。
 * 修改记录：
 * 	2021/04/28: 初版。 刘言。
 *  2021/05/19: 兼容polsys和polsys_lite
 *  2021/05/20: 
 *      去掉SYSTICK定时周期设置，由用户调用Polsys_Tick的周期决定，建议为1ms，否则某些组件可
 *  能会运行出错。刘言。
 *  2021/11/15: 
 * 		定义 _POLSYS_DEBUG 后可以查看CPU使用率、是否过载等调试信息，每个TICK周期更新，过载
 * 	表示在一个TICK周期内不能执行完所有任务，一旦置位复位才能清除。
 * 		增加 _POLSYS_DEBUG 需要的API配置项。
 *      增加 POLSYS_TICK_CYCLE 配置项，此配置项不会影响实际TICK周期，用户如实配置其调用 
 *  Polsys_Tick 的周期，作用是留给需要的组件引用。
 *  2022/11/28:
 *      POLSYS_TICK_CYCLE 不会影响组件，仅提供给polsys引用，对外api时间单位统一为ms。
 *      增加 POLSYS_USE_PRIO 配置项，详见下文。
***********************************************************************************/
#ifndef _POLSYS_CONFIG_H_
#define _POLSYS_CONFIG_H_

// 驱动和组件接口不用再包含头文件
// #include "app.h"
// #include <stddef.h>
// #ifdef __NO_INCLUDE_PATH    // 如果有，定义在 stddef.h
// #include "..\bsp\hard_wire.h"
// #else
#include "hard_wire.h"
// #endif



// #ifdef DEBUG
// 定义表示启用DEBUG功能，可以获得更多系统信息，LITE暂不支持
#define _POLSYS_DEBUG
// #endif

// 定义表明使用的是 POLSYS_LITE ，开发组件或驱动的开发者可以利用这个宏定义让组件或驱动兼容不同的运行环境。
// 不定义表示使用的是标准POLSYS
// #define POLSYS_LITE

// TICK周期，单位ms. 可能不会影响实际TICK周期，用户如实配置其调用 Polsys_Tick 的周期。建议设置为1或10ms，不建议超过10ms。
#define POLSYS_TICK_CYCLE   1

// 定义MCU型号，这将会决定使用的MCU驱动包
#define POLSYS_MCU_MODEL BSP_MCU_MODEL

#ifdef POLSYS_LITE
// 在这里添加需要循环一直执行的任务
#define _POLSYS_TASK_GROUP_LOOP \
    {                           \
        Wdt_Clear();            \
    }
// 在这里添加需要间隔 1 tick 执行的任务
#define _POLSYS_TASK_GROUP_1TICK \
    {                            \
        SLEDC_CtrlLoop();        \
        RHC_Task();              \
        TouchKey_Scan();         \
        SWSD_Loop();             \
    }
// 在这里添加需要间隔 10 tick 执行的任务，如果没有任务，注释掉define可以节省资源
#define _POLSYS_TASK_GROUP_10TICK \
    {                             \
        App_Timer();              \
        BMLite_Loop();            \
    }
// 在这里添加需要间隔100tick执行的任务，如果没有任务，注释掉define可以节省资源
#define _POLSYS_TASK_GROUP_100TICK    App_ProtectFunction()
// 在这里添加需要间隔1000tick执行的任务，如果没有任务，注释掉define可以节省资源
//#define _POLSYS_TASK_GROUP_1000TICK
#else

// 启用空闲回调函数
// 当所有就绪的任务都处理完毕后调用 Polsys_EventIdle()，只要系统空闲，该函数会被反复调用。
// 提示：Polsys_EventIdle()定义成让CPU停止等待中断的代码，可以降低运行时的功耗。
// 注意：耗时的代码将会影响其它任务的响应实时性。
// #define _POLSYS_USE_IDLE_CB

// 最大任务数，<=255，+1增加3字节内存占用
#define POLSYS_MAX_TASKS 10

/*
启用优先级【目前仅实现了实时任务(TASK_PRIO_REAL_TIME)，其它优先级无效】
    定义后在初始化或者创建任务时可以设置一个优先级（周期 | 优先级），高优先级的任务先运行，每
次一个任务执行完毕会重新查找是否有更高优先级任务就绪，直到所有高优先级任务执行完毕才会执行低优
先级任务。
    注释掉表示不启用，优先级是无效的（Interval 参数的高3位依然无效）。
*/ 
// #define POLSYS_USE_PRIO

#endif

// 组件设置，注释掉表示不使用(仅不包含头文件，也可以自行包含头文件使用)

// #define POLSYS_USE_POLSYS_LIB
// #define POLSYS_USE_BMLITE
#define POLSYS_USE_BUTTON_CTRL_STATIC
// #define POLSYS_USE_CLED_CTRL_STATIC
// #define POLSYS_USE_SLED_CTRL_STATIC
// #define POLSYS_USE_RHC
// #define POLSYS_USE_SOFT_PWM
// #define POLSYS_USE_SOFT_UART
// #define POLSYS_USE_SOFT_FIFO
// #define POLSYS_USE_SOFT_CAP_SENSOR
// #define POLSYS_USE_TOUCH_KEY
// #define POLSYS_USE_SOFT_CAPTURE
// #define POLSYS_USE_SOFT_I2C
// #define POLSYS_USE_SWSD_STATIC
// #define POLSYS_USE_UMI_STATIC
// #define POLSYS_USE_UID_LOCK
// 定义表示启用 RT-Thread nano (多线程)
// #define POLSYS_USE_RT_THREAD_NANO

// 需要的API设置

#ifdef _POLSYS_DEBUG
// 获取Tick定时器周期值，用于计算CPU使用率，无法获取时可以返回1
#define _Polsys_GetTickTimerCycleValue()     SYSTICK_VALUE
// 获取Tick定时器当前值（已经跑了多少），用于计算CPU使用率，无法获取时可以返回1.值可能大于655时需要确保返回的是u32否则u16即可。
#define _Polsys_GetTickTimerNowValue()       (SYSTICK_VALUE - SysTick->VAL)
#endif


#endif
